/*
脚本说明:选中角色后，进入权限分配页面 ，对于基本权限的保存
程序员:
*/

//脚本唯一关键字,通过该关键字找到对应脚本，每个脚本必须有该描述。
var v_script_id = 'authsetter_2';
//脚本状态,0:该脚本不许执行，1:该脚本可以执行
var v_status = '1';
//脚本逻辑写在run语句之间
if (run  && action.getAuthority().is(5,"9")){
	var user = action.getSession().getAttribute("user");
	var roleid = action.form.getInteger('roleid');
	var authids = action.form.getString('authids');
	var roleAuthKind = action.form.getString('roleAuthKind');
	var sql = '';
	var ret = '';
	action.retString = '添加成功!';
	//println('roleid='+roleid);
	//println('authids='+authids);
	//println('roleAuthKind='+roleAuthKind);
		
	//当前为静态权限操作,h_auth_role_infos
	var _roleAuthKind = roleAuthKind.split(',');
	var _authids =  authids.split(',');
	//返回 map<树ID，树标题>
	sql = "select id,title from h_auth_trees where id in (" + authids + ")";	
	var treemap = action.buildHashMap(sql,'id','title');
	//返回 map<所有权限种类ID，权限名称>
	sql = "select kind,name from h_auth_kinds ";	
	var allkindsmap = action.buildHashMap(sql,'kind','name');
	
	for(i=0; i<_authids.length; i++){
		//判断这个节点下是否有权限类型：有时可能忘记添加可用的权限类型
		//用户登陆进来可以看到这个节点，至少有一个权限，所以通常该节点至少有一个权限类型
		//这里的判断是为了防止dev用户登陆进来引起的误操作
		sql = "select kind,kindname from v_auth_id_kinds where authid = " + _authids[i];
		//返回节点下可用的权限类型 map<权限种类ID，权限名称>
		var kindmap = action.buildHashMap(sql,'kind','kindname');
		if( kindmap.size()==0  ){
			action.errorCode = 2;
			ret += '<font color=red > 警告：节点[' + treemap.get(_authids[i]) + ']没有设置权限类型!</font><br>';
			continue;
		}
		for(j=0; j<_roleAuthKind.length; j++){
			//查找_authids节点是否有_roleAuthKind类型。
			if(kindmap.get(_roleAuthKind[j]) == null) {
				action.errorCode = 2;
				ret += '<font color=red > 失败：节点[' + treemap.get(_authids[i]) + ']没有 '+ allkindsmap.get(_roleAuthKind[j]) + ' 权限 !</font><br>';
				continue;
			}
			//判断用户，及用户所属角色是否有权限
			if(user.getRolekind()>=3){
				sql = "select count(id) from v_auth_all where authid = " + 
						_authids[i] + " and KIND = " + _roleAuthKind[j]  ;
				if (user.getRoleids('roleid','or') == null){
					sql += ' and userid = '+ user.getId() ;
				}else{
					sql += ' and (' + user.getRoleids('roleid','or') + ' or userid = '+ user.getId() +')';
				}
				if( action.dbUtil.getSampleIntegerValue(sql) == 0 ){
					action.errorCode = 2; 
					ret += '<font color=red > 失败：无权添加 节点[' + treemap.get(_authids[i]) + '] '+ kindmap.get(_roleAuthKind[j]) + ' 权限  !</font><br>';
					continue;
				}
			}
			sql = "select count(id) from h_auth_role_infos where authid = " + 
					_authids[i] + " and authkind = " + _roleAuthKind[j] + " and roleid = " + roleid ;
			if( action.dbUtil.getSampleIntegerValue(sql) == 0 ){
				sql = "insert into h_auth_role_infos(id,authid,authkind,roleid) " +
					" values(h_auth_role_info_seq.nextval,"+_authids[i]+","+_roleAuthKind[j]+","+roleid+")";
				if(action.dbUtil.update("",sql)==0) 
				{
					action.errorCode = 2; 
					ret += '<font color=red > 失败：节点[' + treemap.get(_authids[i]) + ']添加 '+ kindmap.get(_roleAuthKind[j]) + ' 权限 失败 !</font><br>';
				}
			}else{
				action.errorCode = 2;
				ret += '已存在：节点[' + treemap.get(_authids[i]) + ']添加 '+ kindmap.get(_roleAuthKind[j]) + ' 权限 失败 !<br>';
			}
		} 
	}
	if (action.errorCode ==2){
		action.retString = ret;
	}
	//刷新权限分配缓存
	//if (action.errorCode ==0){
		com.handy.plugin.auth.TAuthCache.getInstance().loadAuthRoleInfos();
	//}
		
		  

}